home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / kbdhandl.zip / KEY.ASM < prev    next >
Assembly Source File  |  1993-08-02  |  7KB  |  203 lines

  1. .model large
  2.  
  3. .data
  4. PUBLIC          _keys
  5.                 _keys            db      256 dup(0)
  6. oldint9         dd      0
  7. e0flag          db      0
  8. kSYSREQ         EQU     054h
  9. kCAPSLOCK       EQU     03Ah
  10. kNUMLOCK        EQU     045h
  11. kSCROLLLOCK     EQU     046h
  12. kLEFTCTRL       EQU     01Dh
  13. kLEFTALT        EQU     038h
  14. kLEFTSHIFT      EQU     02Ah
  15. kRIGHTCTRL      EQU     09Dh
  16. kRIGHTALT       EQU     0B8h
  17. kRIGHTSHIFT     EQU     036h
  18. kESC            EQU     001h
  19. kBACKSPACE      EQU     00Eh
  20. kENTER          EQU     01Ch
  21. kSPACE          EQU     039h
  22. kTAB            EQU     00Fh
  23. kF1             EQU     03Bh
  24. kF2             EQU     03Ch
  25. kF3             EQU     03Dh
  26. kF4             EQU     03Eh
  27. kF5             EQU     03Fh
  28. kF6             EQU     040h
  29. kF7             EQU     041h
  30. kF8             EQU     042h
  31. kF9             EQU     043h
  32. kF10            EQU     044h
  33. kF11            EQU     057h
  34. kF12            EQU     058h
  35. kA              EQU     01Eh
  36. kB              EQU     030h
  37. kC              EQU     02Eh
  38. kD              EQU     020h
  39. kE              EQU     012h
  40. kF              EQU     021h
  41. kG              EQU     022h
  42. kH              EQU     023h
  43. kI              EQU     017h
  44. kJ              EQU     024h
  45. kK              EQU     025h
  46. kL              EQU     026h
  47. kM              EQU     032h
  48. kN              EQU     031h
  49. kO              EQU     018h
  50. kP              EQU     019h
  51. kQ              EQU     010h
  52. kR              EQU     013h
  53. kS              EQU     01Fh
  54. kT              EQU     014h
  55. kU              EQU     016h
  56. kV              EQU     02Fh
  57. kW              EQU     011h
  58. kX              EQU     02Dh
  59. kY              EQU     015h
  60. kZ              EQU     02Ch
  61. k1              EQU     002h
  62. k2              EQU     003h
  63. k3              EQU     004h
  64. k4              EQU     005h
  65. k5              EQU     006h
  66. k6              EQU     007h
  67. k7              EQU     008h
  68. k8              EQU     009h
  69. k9              EQU     00Ah
  70. k0              EQU     00Bh
  71. kMINUS          EQU     00Ch
  72. kEQUAL          EQU     00Dh
  73. kLBRACKET       EQU     01Ah
  74. kRBRACKET       EQU     01Bh
  75. kSEMICOLON      EQU     027h
  76. kTICK           EQU     028h
  77. kAPOSTROPHE     EQU     029h
  78. kBACKSLASH      EQU     02Bh
  79. kCOMMA          EQU     033h
  80. kPERIOD         EQU     034h
  81. kSLASH          EQU     035h
  82. kINS            EQU     0D2h
  83. kDEL            EQU     0D3h
  84. kHOME           EQU     0C7h
  85. kEND            EQU     0CFh
  86. kPGUP           EQU     0C9h
  87. kPGDN           EQU     0D1h
  88. kLARROW         EQU     0CBh
  89. kRARROW         EQU     0CDh
  90. kUARROW         EQU     0C8h
  91. kDARROW         EQU     0D0h
  92. kKEYPAD0        EQU     052h
  93. kKEYPAD1        EQU     04Fh
  94. kKEYPAD2        EQU     050h
  95. kKEYPAD3        EQU     051h
  96. kKEYPAD4        EQU     04Bh
  97. kKEYPAD5        EQU     04Ch
  98. kKEYPAD6        EQU     04Dh
  99. kKEYPAD7        EQU     047h
  100. kKEYPAD8        EQU     048h
  101. kKEYPAD9        EQU     049h
  102. kKEYPADDEL      EQU     053h
  103. kKEYPADSTAR     EQU     037h
  104. kKEYPADMINUS    EQU     04Ah
  105. kKEYPADPLUS     EQU     04Eh
  106. kKEYPADENTER    EQU     09Ch
  107. kCTRLPRTSC      EQU     0B7h
  108. kSHIFTPRTSC     EQU     0B7h
  109. kKEYPADSLASH    EQU     0B5h
  110.  
  111. .code
  112.  
  113.                         PUBLIC  _Set_New_Int9
  114. _Set_New_Int9           PROC    FAR
  115.                 push    ds
  116.                 cli
  117.  
  118.                 mov     ax,3509h                ; get old INT 9
  119.                 int     21h
  120.                 mov     si,offset oldint9
  121.                 mov     [si],bx                 ; save offset
  122.                 mov     [si + 2],es             ; save segment
  123.  
  124.                 mov     ax,2509h                ; set new INT 9
  125.                 mov     dx,seg _New_Int9
  126.                 mov     ds,dx
  127.                 mov     dx,offset _New_Int9
  128.                 int     21h
  129.  
  130.                 sti
  131.                 pop     ds
  132.                 ret
  133. _Set_New_Int9           ENDP
  134.  
  135.                         PUBLIC  _Set_Old_Int9
  136. _Set_Old_Int9           PROC    FAR
  137.                 push    ds
  138.                 cli
  139.  
  140.                 mov     ax,2509h                ; set new INT 9
  141.                 mov     si,offset oldint9
  142.                 mov     dx,word ptr [si]        ; load offset
  143.                 mov     ds,word ptr [si + 2]    ; load segment
  144.                 int     21h
  145.  
  146.                 sti
  147.                 pop     ds
  148.                 ret
  149. _Set_Old_Int9           ENDP
  150.  
  151. _New_Int9       PROC    FAR
  152.                 cli
  153.                 push    ds
  154.                 push    ax
  155.                 push    bx
  156.  
  157.                 mov     ax,@data
  158.                 mov     ds,ax
  159.  
  160.                 in      al,60h          ; Get scan code in AL
  161.                 cmp     al,0E0h         ; was it an E0 key?
  162.                 jne     setscancode
  163.  
  164. ; E0 key routine
  165.                 mov     [e0flag],128
  166.                 mov     al,20h          ; Send generic EOI to PIC
  167.                 out     20h,al          ; 001 00 000
  168.                                         ;  |   |  |
  169.                                         ;  |   |  +--- INT request level
  170.                                         ;  |   +------ OCW2
  171.                                         ;  +---------- non-specific EOI command
  172.                 pop     bx
  173.                 pop     ax
  174.                 pop     ds
  175.                 sti
  176.                 iret
  177.  
  178. setscancode:    mov     bl,al                   ; Save scan code in BL
  179.                 and     bl,01111111b
  180.                 add     bl,[e0flag]
  181.                 xor     bh,bh                   ; clear for index use
  182.                 and     al,10000000b            ; keep break bit, if set
  183.                 xor     al,10000000b            ; flip bit - 1 means pressed
  184.                                                 ;          - 0 means released
  185.                 rol     al,1                    ; put it in bit 0
  186.                 mov     [_keys + bx],al         ; set index for key
  187.                 mov     [e0flag],0
  188.  
  189.                 mov     al,20h          ; Send generic EOI to PIC
  190.                 out     20h,al          ; 001 00 000
  191.                                         ;  |   |  |
  192.                                         ;  |   |  +--- INT request level
  193.                                         ;  |   +------ OCW2
  194.                                         ;  +---------- non-specific EOI command
  195.                 pop     bx
  196.                 pop     ax
  197.                 pop     ds
  198.                 sti
  199.                 iret
  200. _New_Int9       ENDP
  201.  
  202.                 END
  203.